home *** CD-ROM | disk | FTP | other *** search
-
-
-
- XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX))))
-
-
-
- NNNNAAAAMMMMEEEE
- XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss - A function that allows writing of
- upward-compatible applications and widgets
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- #include <Xm/Xm.h>
- vvvvooooiiiidddd XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss(
- WWWWiiiiddddggggeeeettttCCCCllllaaaassssssss wwwwiiiiddddggggeeeetttt____ccccllllaaaassssssss,
- XXXXmmmmOOOOffffffffsssseeeettttPPPPttttrrrr **** ooooffffffffsssseeeetttt);
-
- VVVVEEEERRRRSSSSIIIIOOOONNNN
- This page documents Motif 2.1.
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- The use of offset records requires one extra global variable
- per widget class. The variable consists of a pointer to an
- array of offsets into the widget record for each part of the
- widget structure. The XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss function
- allocates the offset records needed by an application to
- guarantee upward-compatible access to widget instance
- records by applications and widgets. These offset records
- are used by the widget to access all of the widget's
- variables. A widget needs to take the steps described in
- the following paragraphs.
-
- Instead of creating a resource list, the widget creates an
- offset resource list. To accomplish this, use the
- XXXXmmmmPPPPaaaarrrrttttRRRReeeessssoooouuuurrrrcccceeeestructure and the XXXXmmmmPPPPaaaarrrrttttOOOOffffffffsssseeeetttt macro. The
- XXXXmmmmPPPPaaaarrrrttttRRRReeeessssoooouuuurrrrcccceeee data structure looks just like a resource
- list, but instead of having one integer for its offset, it
- has two shorts. This structure is put into the class record
- as if it were a normal resource list. Instead of using
- XXXXttttOOOOffffffffsssseeeetttt for the offset, the widget uses XXXXmmmmPPPPaaaarrrrttttOOOOffffffffsssseeeetttt.
-
- XmPartResource resources[] = {
- { BarNxyz, BarCXyz, XmRBoolean,
- sizeof(Boolean), XmPartOffset(Bar,xyz),
- XmRImmediate, (XtPointer)False }
- };
-
- Instead of putting the widget size in the class record, the
- widget puts the widget part size in the same field.
-
- Instead of putting XXXXttttVVVVeeeerrrrssssiiiioooonnnn in the class record, the widget
- puts XXXXttttVVVVeeeerrrrssssiiiioooonnnnDDDDoooonnnnttttCCCChhhheeeecccckkkk in the class record.
-
- The widget defines a variable, of type XXXXmmmmOOOOffffffffsssseeeettttPPPPttttrrrr, to point
- to the offset record. This can be part of the widget's
- class record or a separate global variable.
-
- In class initialization, the widget calls
- XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss, passing it a pointer to contain the
-
-
-
- Page 1 (printed 10/3/02)
-
-
-
-
-
-
- XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX))))
-
-
-
- address of the offset record and the class record. This
- does several things:
-
- +o Adds the superclass (which, by definition, has already
- been initialized) size field to the part size field
-
- +o Allocates an array based upon the number of
- superclasses
-
- +o Fills in the offsets of all the widget parts with the
- appropriate values, determined by examining the size
- fields of all superclass records
-
- +o Uses the part offset array to modify the offset
- entries in the resource list to be real offsets, in
- place
-
- The widget defines a constant that will be the index to its
- part structure in the offsets array. The value should be 1
- greater than the index of the widget's superclass.
- Constants defined for all XXXXmmmmwidgets can be found in XXXXmmmmPPPP....hhhh.
-
- #define BarIndex (XmBulletinBIndex + 1)
-
- Instead of accessing fields directly, the widget must always
- go through the offset table. The XXXXmmmmFFFFiiiieeeelllldddd macro helps you
- access these fields. Because the XXXXmmmmPPPPaaaarrrrttttOOOOffffffffsssseeeetttt and
- XXXXmmmmFFFFiiiieeeellllddddmacros concatenate things together, you must ensure
- that there is no space after the part argument. For
- example, the following macros do not work because of the
- space after the part (Label) argument:
-
- XmField(w, offset, Label, text, char *)
- XmPartOffset(Label, text)
-
- Therefore, you must not have any spaces after the part
- (Label) argument, as illustrated here:
-
- XmField(w, offset, Label, text, char *)
-
- You can define macros for each field to make this easier.
- Assume an integer field _x_y_z:
-
- #define BarXyz(w) (*(int *)(((char *) w) + \
- offset[BarIndex] + XtOffset(BarPart,xyz)))
-
- The parameters for XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss are
-
- _w_i_d_g_e_t__c_l_a_s_s
- Specifies the widget class pointer for the created
- widget
-
-
-
-
- Page 2 (printed 10/3/02)
-
-
-
-
-
-
- XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV XXXXmmmmRRRReeeessssoooollllvvvveeeePPPPaaaarrrrttttOOOOffffffffsssseeeettttssss((((3333XXXX))))
-
-
-
- _o_f_f_s_e_t Returns the offset record
-
- RRRREEEELLLLAAAATTTTEEEEDDDD IIIINNNNFFFFOOOORRRRMMMMAAAATTTTIIIIOOOONNNN
- XXXXmmmmRRRReeeessssoooollllvvvveeeeAAAAllllllllPPPPaaaarrrrttttOOOOffffffffsssseeeettttssss(3).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 3 (printed 10/3/02)
-
-
-
-